﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//main109&110：开辟堆内存空间处理字符串
int main109()
{
	//1.开辟10个字节大小的堆空间；开辟多大的堆空间，就要操作多大的堆空间；可能初始化p就为'\0'；
	char* p = (char*)malloc(sizeof(char) * 10);

	//3.拷贝了12个字节，直接导致越界异常；vs直接就崩了；
	//strcpy(p, "hello world");
	strcpy(p, "hello");
	printf("2.输出指针p指向的堆空间的内存值：%s\n", p);//hello
	free(p);

	system("pause");
	return EXIT_SUCCESS;
}
int main110(void)
{
	char arr[100] = "hello world";
	printf("4.输出栈区字符数组arr的地址：%p\n", arr);//00FAFD94
	arr[1] = 'A';

	//9.字符串常量p1和p2，不允许修改内存值，即不允许修改字符串；并且p1和p2的地址相同；
	char* p1 = "hello world";
	char* p2 = "hello world";
	printf("5.输出数据区或常量区的指针p1的地址：%p\n", p1);//00273C48
	printf("6.输出数据区或常量区的指针p2的地址：%p\n", p2);//00273C48

	char* p = (char*)malloc(sizeof(char) * 100);
	strcpy(p, "hello world");
	printf("7.输出堆区的指针p的地址：%p\n", p);//014D6458
	*p = 'A';
	printf("8.修改指针p指向的堆区内存的值：%s\n", p);//Aello world

	free(p);

	return 0;
}